﻿#include <stdio.h> //输入输出相关的函数
#include <string.h>//字符串相关的函数

int main()
{
	//"abcdef";
	//库函数：strlen - 统计的是字符串中\0之前的字符个数
	//string length - 求字符串长度的一个函数
	int len = strlen("abcdef");//a b c d e f \0
	printf("%d\n", len);
	printf("\n");

	/*布尔类型：使⽤整数 0 表⽰假，非零值表⽰真。
	布尔类型的使⽤得包含头⽂件 <stdbool.h>
	布尔类型变量的取值是：true 或者 false。*/
#include <stdbool.h>
	//_Bool flag = false;
	bool flag = true; //_Bool与bool表示是一致的
	if (flag)
		printf("I like C\n");
	printf("\n");

/* sizeof操作符：专门是⽤来计算sizeof的操作符数的类型⻓度的，单位是字节。
	sizeof 操作符的操作数可以是类型，也可是变量或者表达式。
	sizeof计算的结果是 size_t 类型的
    size_t类型的值，打印的时候使用%zd */
	printf("%zd\n", sizeof(_Bool));
	printf("%zd\n", sizeof(char));
	printf("%zd\n", sizeof(short));
	printf("%zd\n", sizeof(int));
	printf("%zd\n", sizeof(long));
	printf("%zd\n", sizeof(long long));
	printf("%zd\n", sizeof(float));
	printf("%zd\n", sizeof(double));
	printf("%zd\n", sizeof(long double));
	printf("\n");

//sizeof 后边的表达式是“不真实参与运算”的，根据“表达式的类型”来得出⼤⼩。
	short s = 10;
	int num = 100;
	printf("%zd\n", sizeof(s = num + 2));
	printf("%d\n", s); //由于sizeof 后边的表达式是不真实参与运算，故s的值并没有发生改变
	printf("\n");

/*signed和unsigned：
	C语⾔使⽤signed和unsigned关键字修饰字符型和整型类型的。
	signed关键字，表⽰⼀个类型带有正负号，包含负值；
	unsigned关键字，表⽰该类型不带有正负号，只能表⽰零和正整数。*/
	int num1 = 10;
	num1 = -10;
	//对于 int 类型，默认是带有正负号的，也就是说 int 等同于 signed int 。
	//对于int类型的数据打印应该使用%d
	printf("%d\n", num1);

	unsigned int num2 = 100;
	num2 = -100; //由于unsigned表⽰不带有正负号，若添加负号会使打印出来的值不是本身
	//对于unsigned int类的数据打印应该使用%u
	printf("%u\n", num2);
	printf("\n");
	/* unsigned int ，unsigned long ，unsigned long long ，
	对应的 printf() 占位符分别是%u、%lu和%llu */

//变量的名字：
    //1. 有意义
    //2. 变量的名字是由字母、数字、下划线组成
    //3. 但是不能以数字开头
	unsigned int age = 18;//初始化
	double price = 55.5;//初始化
	double weight = 86.5;//初始化
	bool is_ok = true;
	int _2b;

//单⽬操作符(操作符只有⼀个操作数)：++、--
	//int a = 10;
	//int b = a++; //后置++：先使用，后+1
	////b = a, a = a+1;
	//printf("a = %d\n", a);//11
	//printf("b = %d\n", b);//10

	//int a = 10;
	//int b = ++a; //前置++：先+1，后使用
	////a = a+1, b = a;
	//printf("a = %d\n", a);//11
	//printf("b = %d\n", b);//11

	//int a = 10;
	//int b = --a; //前置--：先-1，后使用
	////a = a-1, b = a;
	//printf("a = %d\n", a);//9
	//printf("b = %d\n", b);//9

	//int a = 10;
	//int b = a--; //后置--：先使用，后-1
	////b = a, a = a-1;
	//printf("a = %d\n", a);//9
	//printf("b = %d\n", b);//10
	return 0;
}
